package com.huellas.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import com.huellas.bean.CatalogoTareaBean;
import com.huellas.bean.CitaBean;
import com.huellas.bean.CitaCatalogoBean;
import com.huellas.bean.ClienteBean;
import com.huellas.bean.DoctorBean;
import com.huellas.bean.EstadoCitaBean;
import com.huellas.bean.PacienteBean;
import com.huellas.bean.UsuarioBean;
import com.huellas.excepcion.DAOExcepcion;
import com.huellas.util.ConexionBD;

public class CitaCatalogoDAO extends BaseDAO{

	//Metodo para insertar un registro en la tabla CitaCatalogo
	public void insertarCitaCatalogo(CitaCatalogoBean citaCatalogoBean) throws DAOExcepcion {
		String query = "insert into CitaCatalogo(CoCita,CoCatalogoTarea) values (?,?)";
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		try {
			connection = ConexionBD.obtenerConexion();
			preparedStatement = connection.prepareStatement(query);
			preparedStatement.setInt(1, citaCatalogoBean.getCitaBean().getCoCita());
			preparedStatement.setInt(2, citaCatalogoBean.getCatalogoTareaBean().getCoCatalogoTarea());
				
			int i = preparedStatement.executeUpdate();
				
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(resultSet);
			this.cerrarStatement(preparedStatement);
			this.cerrarConexion(connection);
		}
	}
	
	//Metodo para buscar citas de tipo vacuna
	public Collection<CitaCatalogoBean> buscarCitaCatalogo(int CoCliente, String NoPaciente, String FeCita) throws DAOExcepcion{
		String query = "select c.CoCita, c.FeCita, c.FeHora, c.FlTipoCita, ct.NoCatalogoTarea, d.NoUsuario as 'NoDoctor', p.NoPaciente, cl.NoUsuario as 'NoCliente', e.NoEstadoCita "
				       + "from CitaCatalogo cc join (Cita c, CatalogoTarea ct, Doctor d, Paciente p, Cliente cl, EstadoCita e) on (cc.CoCita = c.CoCita "
				       + "and cc.CoCatalogoTarea = ct.CoCatalogoTarea and c.CoDoctor = d.CoUsuario and c.CoPaciente = p.CoPaciente and p.CoCliente = cl.CoCliente "
				       + "and c.CoEstadoCita = e.CoEstadoCita) where c.FlTipoCita like '%tarea%' and c.CoEstadoCita = 1 and cl.CoCliente = ? and p.NoPaciente like ? "
				       + "and c.FeCita like ?";
		Collection<CitaCatalogoBean> listaCitaCatalogo = new ArrayList<CitaCatalogoBean>();
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
			
		try{
			connection = ConexionBD.obtenerConexion();
			preparedStatement = connection.prepareStatement(query);
			preparedStatement.setInt(1, CoCliente);
			preparedStatement.setString(2, "%" + NoPaciente + "%");
			preparedStatement.setString(3, "%" + FeCita + "%");
			resultSet = preparedStatement.executeQuery();
				
			while(resultSet.next()){
				DoctorBean doctorBean = new DoctorBean();
				doctorBean.setNoUsuario(resultSet.getString("NoDoctor"));
				
				ClienteBean clienteBean = new ClienteBean();
				clienteBean.setNoUsuario(resultSet.getString("NoCliente"));
				
				PacienteBean pacienteBean = new PacienteBean();
				pacienteBean.setNoPaciente(resultSet.getString("NoPaciente"));
				pacienteBean.setClienteBean(clienteBean);
					
				EstadoCitaBean estadoCitaBean = new EstadoCitaBean();
				estadoCitaBean.setNoEstadoCita(resultSet.getString("NoEstadoCita"));
				
				CitaBean citaBean = new CitaBean();
				citaBean.setCoCita(resultSet.getInt("CoCita"));
				citaBean.setFeCita(resultSet.getString("FeCita"));
				citaBean.setFeHora(resultSet.getString("FeHora"));
				citaBean.setFlTipoCita(resultSet.getString("FlTipoCita"));
				citaBean.setPacienteBean(pacienteBean);
				citaBean.setEstadoCitaBean(estadoCitaBean);
				citaBean.setUsuarioBean(doctorBean);
				
				CatalogoTareaBean catalogoTareaBean = new CatalogoTareaBean();
				catalogoTareaBean.setNoCatalogoTarea(resultSet.getString("NoCatalogoTarea"));
				
				CitaCatalogoBean citaCatalogoBean = new CitaCatalogoBean();
				citaCatalogoBean.setCitaBean(citaBean);
				citaCatalogoBean.setCatalogoTareaBean(catalogoTareaBean);
				listaCitaCatalogo.add(citaCatalogoBean);
			}
		}catch(SQLException e){
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}finally{
			this.cerrarResultSet(resultSet);
			this.cerrarStatement(preparedStatement);
			this.cerrarConexion(connection);
		}
			
		return listaCitaCatalogo;
	}
	
	//Metodo para obtener un registro de una cita de tipo tarea
	public Collection<CitaCatalogoBean> obtenerRegistroCitaCatalogo(int CoCatalogoTarea, String FeCita, String FeHora, String FlTipoCita, int CoEstadoCita, int CoPaciente, int CoDoctor) throws DAOExcepcion{
		String query = "select cc.CoCatalogoTarea, c.FeCita, c.FeHora, c.FlTipoCita, c.CoEstadoCita, c.CoPaciente, c.CoDoctor "
				       + "from CitaCatalogo cc join (Cita c, CatalogoTarea ct) on (cc.CoCita = c.CoCita and cc.CoCatalogoTarea = ct.CoCatalogoTarea) "
				       + "where cc.CoCatalogoTarea = ? and c.FeCita = ? and c.FeHora = ? and c.FlTipoCita like ? and c.CoEstadoCita = ? "
				       + "and c.CoPaciente = ? and c.CoDoctor = ?";
		Collection<CitaCatalogoBean> listaCitaCatalogo = new ArrayList<CitaCatalogoBean>();
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;

		try{
			connection = ConexionBD.obtenerConexion();
			preparedStatement = connection.prepareStatement(query);
			preparedStatement.setInt(1, CoCatalogoTarea);
			preparedStatement.setString(2, FeCita);
			preparedStatement.setString(3, FeHora);
			preparedStatement.setString(4, "%" + FlTipoCita + "%");
			preparedStatement.setInt(5, CoEstadoCita);
			preparedStatement.setInt(6, CoPaciente);
			preparedStatement.setInt(7, CoDoctor);
			resultSet = preparedStatement.executeQuery();
				
			while(resultSet.next()){
				CatalogoTareaBean catalogoTareaBean = new CatalogoTareaBean();
				catalogoTareaBean.setCoCatalogoTarea(resultSet.getInt("CoCatalogoTarea"));
				
				EstadoCitaBean estadoCitaBean = new EstadoCitaBean();
				estadoCitaBean.setCoEstadoCita(resultSet.getInt("CoEstadoCita"));
				
				PacienteBean pacienteBean = new PacienteBean();
				pacienteBean.setCoPaciente(resultSet.getInt("CoPaciente"));
				
				UsuarioBean usuarioBean = new UsuarioBean();
				usuarioBean.setCoUsuario(resultSet.getInt("CoDoctor"));
					
				CitaBean citaBean = new CitaBean();
				citaBean.setFeCita(resultSet.getString("FeCita"));
				citaBean.setFeHora(resultSet.getString("FeHora"));
				citaBean.setFlTipoCita(resultSet.getString("FlTipoCita"));
				citaBean.setEstadoCitaBean(estadoCitaBean);
				citaBean.setPacienteBean(pacienteBean);
				citaBean.setUsuarioBean(usuarioBean);
				
				CitaCatalogoBean citaCatalogoBean = new CitaCatalogoBean();
				citaCatalogoBean.setCitaBean(citaBean);
				citaCatalogoBean.setCatalogoTareaBean(catalogoTareaBean);
				listaCitaCatalogo.add(citaCatalogoBean);
			}
		}catch(SQLException e){
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}finally {
			this.cerrarResultSet(resultSet);
			this.cerrarStatement(preparedStatement);
			this.cerrarConexion(connection);
		}
			
		return listaCitaCatalogo;
	}
}
